package com.leet.code.simple_array;

/**
 * @description:
 * @author: WYG
 * @time: 2020/12/1 18:37
 */

public class SumEvenAfterQueries {
    public int[] sumEvenAfterQueries(int[] A, int[][] queries) {
        int[] answer = new int[queries.length]; //存放结果的数组
        int sum = 0;    //存放偶数和的变量
        int temp = 0;   //存放A[i]元素变化之前的值
        for (int i = 0; i < A.length; i++) {
            if (A[i] % 2 == 0) {
                sum += A[i];    //计算偶数和
            }
        }
        for (int i = 0; i < queries.length; i++) {
            temp = A[queries[i][1]];    //存放A[i]改变之前的值
            A[queries[i][1]] += queries[i][0];  //根据queries中的值对相应的A[i]做出变化
            /**
             以下为三种情况:
             1.被改变的A[i]变化前不是偶数,变化后为偶数,那么新的偶数和就应该加上这个新的偶数,对应第一个if
             2.被改变的A[i]变化前是偶数,变化后也是偶数,那么说明变化的量为偶数,那么新的偶数和直接加上这个变化的量即可
             3.被改变的A[i]变化前是偶数,变化后也是奇数,那么说明新的偶数和中不包含这个旧的偶数,故直接减去这个旧的偶数即可
             */
            if (A[queries[i][1]] % 2 == 0 && temp % 2 != 0) {
                sum += A[queries[i][1]];
            }
            if (A[queries[i][1]] % 2 == 0 && temp % 2 == 0) {
                sum += queries[i][0];
            }
            if (A[queries[i][1]] % 2 != 0 && temp % 2 == 0) {
                sum -= temp;
            }
            answer[i] = sum;
        }
        return answer;
    }
}
